package speedchina.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import speedchina.entity.user.User;
import speedchina.util.security.ShiroUtils;
import speedchina.vo.LayuiTableVO;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;


/**
 * 基类controller
 *
 * @author earthchen
 * @date 2018/9/25
 **/
public class BaseController
{

    /**
     * 将前台传递过来的日期格式的字符串，自动转化为Date类型
     *
     * @param binder 绑定器
     */
    @InitBinder
    public void initBinder(WebDataBinder binder)
    {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        dateFormat.setLenient(false);
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
    }

    /**
     * 获取当前登录用户信息
     *
     * @return 用户信息
     */
    public User getUser()
    {
        return ShiroUtils.getUser();
    }

    /**
     * 设置当前登录用户
     *
     * @param user 用户信息
     */
    public void setUser(User user)
    {
        ShiroUtils.setUser(user);
    }

    /**
     * 获取用户id
     *
     * @return 用户id
     */
    public Long getUserId()
    {
        return getUser().getUserId();
    }

    /**
     * 获取用户名
     *
     * @return 用户名
     */
    public String getLoginName()
    {
        return getUser().getLoginName();
    }

    /**
     * 将page对象转换为layui table
     *
     * @param page 分页对象
     * @param <T>  泛型对象
     * @return layui table
     */
    public <T> LayuiTableVO<T> getTableInfo(IPage<T> page)
    {
        LayuiTableVO tableVO = new LayuiTableVO();
        tableVO.setCode(0);
        tableVO.setMsg("success");
        tableVO.setCount(page.getTotal());
        tableVO.setData(page.getRecords());
        return tableVO;
    }

    /**
     * 包装layui table
     *
     * @param data  列表
     * @param total 总数
     * @param <T>   泛型对象
     * @return layui table
     */
    public <T> LayuiTableVO<T> getTableInfo(List<T> data, Long total)
    {
        LayuiTableVO tableVO = new LayuiTableVO();
        tableVO.setCode(0);
        tableVO.setMsg("success");
        tableVO.setCount(total);
        tableVO.setData(data);
        return tableVO;
    }

//    /**
//     * 包装list成page
//     *
//     * @param list
//     * @param <T>
//     * @return
//     */
//    protected <T> Page<T> wrapPageResult(List<T> list)
//    {
//        Page<T> page = new Page();
//        Pagination pagination = PageHelper.getPagination();
//        page.setRecords(list);
//        BeanUtils.copyProperties(pagination, page);
//        return page;
//    }
}
